package com.bo.day20240924;

/**
 * 折纸问题
 * 折纸，每次都是将纸从右向左对折，凹痕为 0，凸痕为 1，求折 n 次后，将纸展开的折痕组成的 0 1 序列。
 * 思路；
 * 二叉树的中序遍历
 * 脑补：折纸肯定是一个满二叉树，可以发现左树
 *
 * @Author: gpb
 * @Date: 2024/9/25 10:19
 * @Description:
 */
public class PaperFolding {

    /**
     * 打印对折N次后循序
     *
     * @param N
     */
    public static void printAllFolds (int N) {
        process(1, N, true);
        System.out.println();
    }

    /**
     * i 表示当前层数，n表示一共几层，b表示当前层是否是凹痕
     *
     * @param i 当前层数
     * @param n 对着了几次,脑补成为多少层的二叉树
     * @param b true 凹,false 凸
     */
    private static void process (int i, int n, boolean b) {
        if (i > n) {
            return;
        }
        process(i + 1, n, true);
        System.out.print(b ? "凹 " : "凸 ");
        process(i + 1, n, false);
    }
    public static void main(String[] args) {
        int N = 10;
        printAllFolds(N);
    }
}
